


//===== 公共变量
//var after_interface = 'http://b.wuye.top/interface/after_interface.php';
//var before_interface = 'http://b.wuye.top/interface/before_interface.php';
var after_interface = '../interface/after_interface.php';
var before_interface = '../interface/before_interface.php';
var upyun_url = 'http://wuye-message.bm123.club';








//===== 项目特定函数区

//获取当前选择的city_code
function GetCurrentCitycode(){
	return JSON.parse($('#county').find('option:selected').val());
}


/*
	### 获取开通城市并显示到元素中
		配合GetTokenSet(fun)可获取选择后的县信息
		type 
			false 调用AjaxBefore	默认
			true 调用AjaxAfter	默认
*/
function GetAndViewOpenCity(province,city,county,fun,view,type){
	view = 1;
	// if(localStorage.open_city && localStorage.open_city_expire && localStorage.open_city_expire > new Date().getTime()){
	// 	if(view)C('open_city from sess');
	// 	var city_info = JSON.parse(localStorage.open_city);
	// 	ViewOpenCity(city_info,province,city,county,function(county_info){
	// 		CacheCountyInfo(county_info,fun);
	// 	});
	// }else{
	// 	ToGetData('/open_city/open_city.html',function(res){
	// 		if(/^\[.*\]$/.test(res)){
	// 			if(view)C('open_city from upyun');
	// 			localStorage.open_city = res;
	// 			localStorage.open_city_expire = new Date().getTime()+66000;//3600000*24*7; //一周过期
	// 			var city_info = JSON.parse(res);
	// 			//需要引入js文件
	// 			ViewOpenCity(city_info,province,city,county,function(county_info){
	// 				CacheCountyInfo(county_info,fun);
	// 			});
	// 		}else{
	// 			//后台获取
	// 		}
	// 	});
	// }
		if(!type){
			AjaxBefore({type:'get_open_city'},function(res){
				if(!/^{.*}$/.test(res)){
					return;
				}
				if(view)C('get_open_city from after');
				var tmp = JSON.parse(res);
				sessionStorage.token1 = tmp.token1;
				ViewOpenCity(tmp.data,province,city,county,function(county_info){
					CacheCountyInfo(county_info,fun);
				});
			});
		}else{
			AjaxAfter({type:'get_open_city'},function(res){
				if(!/^{.*}$/.test(res)){
					return;
				}
				if(view)C('get_open_city from after2');
				var tmp = JSON.parse(res);
				sessionStorage.admin_token1 = tmp.token1;
				ViewOpenCity(tmp.data,province,city,county,function(county_info){
					CacheCountyInfo(county_info,fun);
				});
			});
		}
	function CacheCountyInfo(county_info,fun){
		var tmp = JSON.parse(county_info);
		var tmp2 = [tmp.code,tmp.name,tmp.db_host,tmp.db_name];
		sessionStorage.tokenSet = JSON.stringify(tmp2);
		fun();
	}
}




/*
	### 后续获取当前选择城市信息
	参一：int 获取类型：2 3 4

	return:
			1 返回城市code
			2 返回城市名
			3 返回城市对应库址
			4 返回城市对应库名
			默认 返回当前选择的全部信息

	示例：
		var city_code = GetCityInfo(); 
*/
function GetCityInfo(type){
	if(!sessionStorage.tokenSet){
		//location.replace('get_user_info.html');return;
		return;
	}else{
		var info = JSON.parse(sessionStorage.tokenSet);
		switch(type){
			case 1:return info[0];break;	//返回城市名
			case 2:return info[1];break;	//返回城市名
			case 3:return info[2];break;	//返回城市对应库址
			case 4:return info[3];break;	//返回城市对应库名
			default:return info;break;		//返回当前选择城市全部信息
		}
	}
}



// //获取当前选择县的信息
// function GetTokenSet(fun){
// 	if(sessionStorage.tokenSet){
// 		fun(JSON.parse(sessionStorage.tokenSet));
// 	}else{
// 		location.replace('index.html');
// 	}
// }



/*
	### 获取用户信息
	参一：获取类型，false 全部数据，true 只获取用户openid
*/
function GetUserInfo(type){
	if(!localStorage.user_info){
		location.replace('get_user_info.html');
	}else{
		var user_info = JSON.parse(localStorage.user_info);
		if(!user_info.info){
			location.replace('get_user_info.html');
		}
		if(user_info.time + 6500000 < new Date().getTime()){ 	//过期
			location.replace('get_user_info.html');
			return;
		}
		//var data = JSON.parse(user_info.info);
		var data = user_info.info;
		if(!data.openid){
			location.replace('get_user_info.html');
		}
		if(type){
			return data.openid;
		}else{
			return data;
		}
	}
}








//获取指定小区的管理员列表
function GetAdminUserList(area_id,fun,view){
	var city_code = GetCityInfo(1);
	var data = {
		type:'GetAdminUserList',
		area_id:area_id
	}
	AjaxBefore(data,function(res){
		if(!/^{.*}$/.test(res)){
			return;
		}
		if(view)C('GetAdminUserList from after');

		var tmp = JSON.parse(res);
		sessionStorage.token1 = tmp.token1;
		if(tmp.stat == 'ok'){
			var res2 = tmp.data;
		}else{
			var res2 = '';
		}
		fun(res2);
	});
}





/*
	### 跳转到小区详情页
	参一：小区id
	参二：小区名
	参三：来路类别 默认false 为 me 页，true 为 area_list 页
*/
function jump_area_detail(id,area_name,type){
	if(!id || !area_name){
		return;
	}
	sessionStorage.current_area_id = id;
	sessionStorage.current_area_name = area_name;
	sessionStorage.area_detail_pnow = 1; //重置页码
	if(type){
		sessionStorage.detail_type = 'me';
	}else{
		sessionStorage.detail_type = '';
	}
	location.href='area_detail.html';
}


/*
	### 获取我的小区列表
	参一：城市code
	参二：回调
	return 返回 字串方式的小区id列表
	注：函数必须在有用户信息及TokenSet缓存情况下执行
	示例：
		GetMyAreaList(tokenSet[0],fun);

*/
function GetMyAreaList(city_code,fun,expire){
	var data = {
		type:'GetMyAreaList'
	}
	AjaxBefore(data,function(res){
		if(!/^{.*}$/.test(res)){
			if(tmp_view)C('fun.js on GetMyAreaList '+res);
			return;
		}
		var tmp_data = JSON.parse(res);
		sessionStorage.token1 = tmp_data.token1;
		fun(tmp_data.data);
	},before_interface);
}



















//从local本地或upyun本地获取数据
function ToGetData(path,fun,type=false){
	if(!type){						//默认false 为local本地
		var path2 = '../cache' + path;
	}else{							//默认ture 为upyun本地
		var path2 = upyun_url + path;
	}
	Ajax({},function(res){
		fun(res);
	},path2,0,1)
}









/*
	### 附带token的 jquery异步加载
	参一：对象方式的请求数据 
	参二：回调
	参三：请求地址
	参四：是否异步.默认无值为异步，有值时为同步
	参五：提交方式 默认均值为post，有值为get
*/


function AjaxBefore(data,fun,url,async,method){		//前台专用
	if(!url){
		url = before_interface;
	}
	data.openid = GetUserInfo(1);
	data.token1 = sessionStorage.token1;
	var tokenSet = GetCityInfo();
	if(tokenSet){
		data.token2 = tokenSet[2];	//库址
		data.token3 = tokenSet[3];	//库名
		data.token4 = tokenSet[0];	//city_code
	}
	Ajax(data,function(res){
		fun(res);
	},url,async,method);
}


//后台专用
function AjaxAfter(data,fun,url){
	if(!sessionStorage.admin_token1 || !sessionStorage.admin_user){
		location.replace('after_login.html');
	}
	data.token1 = sessionStorage.admin_token1;
	data.user = sessionStorage.admin_user;
	Ajax(data,function(res){
		fun(res);
	},after_interface);
}






/*
	### 附带token的 JS异步加载 (该方式只支持POST异步请求，可上传文件)
	参一：formData数据对象
	参二：请求地址
	参三：回调
	示例：
		Ajax_FormData2(formData,after_url,function(res){
			C(res);
		});
*/
function Ajax_FormData2(formData,after_url,fun){
	GetToken_Js(formData,after_url,function(t){
		formData.append('token',t); 
		Ajax_FormData(formData,after_url,function(res){
			fun(res);return;
		},false,true);
	});
}

function GetToken_Js(formData,after_url,fun){
	var f_tk = new FormData();
	f_tk.append('type','token');
	f_tk.append('token_name',formData.get('type'));
	Ajax_FormData(f_tk,after_url,function(t){
		fun(t);
	},false,true);
}















































//==== 公共函数区



//检测是否为微信浏览器
function IsWxWeb(){
	if(navigator.userAgent.match('(micromessenger)|(MicroMessenger)')){
		return true;
	}else{
		return false;
	}
}





/*
	### JS版获取微信openid
	return  返回微信用户的openid 或跳转到错误页
	示例：
		var openid = JsGetOpenid();
*/
function JsGetOpenid(){
	//是微信浏览器，则获取微信openid
	if(navigator.userAgent.match('(micromessenger)|(MicroMessenger)')){
		var back_uri = encodeURIComponent(document.URL);	//获取当前页面url
		if(GetUrlParm('get_openid_res')){
			var res = GetUrlParm('get_openid_res');
			if(res && /^{.*}$/.test(res)){
				var res2 = JSON.parse(decodeURIComponent(res));
				return res2.openid;	//获取到openid
			}else{
				location.replace('error.html');	//不是微信浏览器跳转到错误页
			}
		}else{
			//跳转到腾讯接口
			location.href='http://tools.bm123.top/wx_login/wx_js.php?get_openid_back_uri='+back_uri+'&t=t';
		}
	}else{
		location.replace('error.html?t=2');	//不是微信浏览器跳转到错误页
	}
}









/*
	### 跨域请求
	参一：string 	请求url
	参二：string 	回调函数名
	参三：function 	成功返回数据，失败返回 err
	参四：int 		超时，默认500毫秒
	示例：
		var url = 'http://www.t2.top/domain.php';
		CorsQuery(url,"JumpDomain",function(res){
			console.log(res);
		},2000);

		domain.php页面
		JumpDomain('http://www.t2.top/domain.html')
*/
function CorsQuery(url,CallBackName,fun,time){
	if(!CallBackName){
		var CallBackName = 'Gets';
	}
	var stat = false;
	$.ajax({
	  url:url,
	  dataType:"jsonp",
	  jsonpCallback:CallBackName, //指定异域使用的函数名为aabbcc
	  success:function(res){
	  	stat = true;
	  	fun(res);
	  }
	});
	var time = parseInt(time) > 0?parseInt(time):500;
	setTimeout(function(){
		if(!stat){
			fun('err');
		}
	},time);
}



/*
	### 处理跨域请求返回数据(去除头尾，返回json字串)
*/
function CorsBackTrim(res){
	var start = res.indexOf('(')+1;
	var end = res.lastIndexOf(')');
	return res.substring(start,end);
}





	
/*
	### 判断远程url是否可用
	参一：请求的url
	参二：回调
	参三：超时，默认1000毫秒
	示例：
		UrlIsActive(url,function(s){
			C(s);
		});
*/
function UrlIsActive(url,fun,timeout){
	if(!timeout){
		var timeout = 1000;
	}
	var ping_stat = false;
	if(window.XMLHttpRequest){
	  var ajax=new XMLHttpRequest();
	}else{
	  var ajax=new ActiveXObject("Microsoft.XMLHTTP");
	}
	ajax.open('GET',url,1);
	ajax.send();
	ajax.onreadystatechange = function(){
		if(ajax.readyState == 4 && ajax.status == 200){
			ping_stat = true;
			fun(ping_stat);
		}
	}
	setTimeout(function(){
		if(!ping_stat){
			fun(ping_stat);
		}
	},timeout);
}








/*
	### 检测文件是否合法(大小，后缀) 
		参一：文件对象(必选)
		参二：文件大小(可选，默认500Kb)
		参三：文件后缀(可选，默认jpg,png,gif)
		return: 
			e1	文件类型不正确（参三使用默认时会检测文件类型)
			e2	文件大小超限
			e3	文件后缀不合法
			true 	通过检测返回true
		示例：
			img_select.onchange=function(){
				var file = img_select.files[0];
				alert(CheckFile(file,50000,['txt','zip']));
			}
*/
function CheckFile(file,size,file_exts){
	if(!size){
		var size = 500000;
	}
	if(!file_exts){
		var file_types = ['image/gif','image/jpeg','image/png'];	//文件类型过滤
		var file_exts = ['gif','GIF','jpeg','JPEG','jpg','JPG','png','PNG'];	//文件后缀过滤
		if(file_types.indexOf(file.type) < 0){
			return 'e1';
		}
	}
	if(file.size > size){
		return 'e2';
	}
	var ext = file.name.substring(file.name.lastIndexOf('.')+1);
	if(file_exts.indexOf(ext) < 0){
		return 'e3';
	}
	return true;
}












/*
	### 对操作进行确认
	参一：设定的操作码 ，默认为123
	说明：操作需要得到确认且输入操作码要与指定的操作码一致才可后续执行。
	示例：
		CheckControl();
		CheckControl(222);

*/
function CheckControl(pwd){
	if(!confirm('确认该操作?')){
		exit;
	}
	if(!pwd){
		var pwd = 123;
	}
	if(prompt('输入操作码！') != pwd){
		A('操作码不正确!');
		exit;
	}
}







/*
	### 获取当前cookie中指定字段的值
	### 参一：想要获取的字段名 如：uid
	### return: 成功：反回对应字段的cookie值，失败返回 err
	### 示例：
		当前页面cookie : a=aaa; b=bbb; c=ccc
		var key='b';
		alert(GetCookie(key));	//结果： bbb
*/
function GetCookie(key){
	//var p = '/'+key+'=([^;]*)?/';
	var p = '/^'+key+'=([^;]*)?| '+key+'=([^;]*)?/';
	if(res = document.cookie.match(eval(p))){
		//return res[1];
		if(res[1]){
			return res[1];
		}else{
			return res[2];
		}
	}else{
		return false;
	}
}






/*
	### 获取GET附带参数
	参一：key (string) GET传参的参名
	return 	成功返回参名对应的值，失败返回false
*/
function GetUrlParm(key){
	var p = '/'+key+'=([^&]*)/';
	if(res = document.URL.match(eval(p))){
		if(res[1]){
			return res[1];
		}else{
			return false;
		}
	}else{
		return false;
	}
}






/*
	### 蒙板提示框(提示时页面被盖不可操作)
	### 参一：提示内容
	### 需要：函数需要一个 id='notice' 的元素做容器
	### 示例：
		 <div id='Notice'></div>
		 Notice('信息发布成功！'); //开启提示框
		 Notice();	//关闭提示框
*/
var Notice_deg = 1;
var Notice_rotate;
function Notice(text){
	if(text){
		var str = "<div class='sca_Notice' style='z-index:100;position:fixed;top:0px;width:100%;height:100%;background:rgba(255,100,100,0.5)'><div id='notice_text' style='background:#fff;width:200px;margin:20% auto;text-align:center;padding:30px;border-radius:10px'><div class='sca_Notice_img' style='padding:10px;border-top:1px solid #bbb;border-right:1px solid #999;border-bottom:1px solid #666;display:inline-block;border-radius:25px'></div><div>"+text+"</div></div></div>";
		$('body').append(str);
		Notice_rotate = setInterval(function(){
			$(".sca_Notice_img").css({'transform':'rotate('+Notice_deg+'deg)'});
			Notice_deg +=25;
		},100)
	}else{
		//$('.sca_Notice').html('');
		$('.sca_Notice').remove();
		clearInterval(Notice_rotate);	
	}
}









/*
	### 点击切换验证码
	参一：图片元素对象
	参二：图片切换的时间延迟
	示例：
		<img src="xx.php?type=code" onclick='ChangeCode(this,2000)'>

*/
function ChangeCode(o,time){
	if(!time){
		var time = 1000;	
	}
	if(parseInt(sessionStorage.code_time)+time > new Date().getTime()){
		return;
	}
	var src = o.src+'&m='+Math.random();
	o.src = src;
	sessionStorage.code_time = new Date().getTime();
}



	






	
/*
	### 检测字段
	示例：
		Field_Check(/^.{3,20}$/,StoreMainEdit_Name,'js商户名长度为3-20个字符!');
*/
function Field_Check(p,str,notice){
	if(!p.test(str)){
		A(notice);exit;
	}
}








/*
	### 检测ip地址的格式是否正确
	参一：ip   要检测的内容
	return 	合法ip返回true ,非法返回false
*/
function ChacekIpFormart(ip){
	if(/^(([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))$/.test(ip)){
		return true;
	}else{
		return false;
	}
}









/*
	### 表单选择并读取文件，如是图片并显示
	参一：文件选择表单项的id
	参二：要显示图片的元素id,如果为空则不显示图片
	参三：回调(返回file或'err')
	示例：
		<input type='file' id='a' />
		<img src='' id='b' />
		SelectOrViewImg('a','b',function(f){
			alert(f);
		});
*/
function SelectOrViewImg(file_input_id,view_id,fun){
	var StoreMain_File = document.getElementById(file_input_id);
	var view_ele = document.getElementById(view_id);
	StoreMain_File.onchange=function(){
		var file = StoreMain_File.files[0];
		var reader = new FileReader();
		reader.onloadend = function(){
			if(view_id){	//如果指定了图片显示元素，则显示图片
				view_ele.src = reader.result;
			}
		}
		if(file){
			reader.readAsDataURL(file);
			fun(file);
		}else{
			fun('err');
		}
	};
}












/*
	### 检测并替换字串中的特殊字符为实体字符 (' , " , > , < , / , \)
	### 参一：源字串 
	### 参二：是否反解析,及分割特殊字符与数值
				空 为特殊字符转实体  默认
				1  为实体转字符
				1+ 将实体字符与数值的分割。如 &#392143 会产生乱码，分割为 &#39 2143
	### return : 返回替换后的字串
	### 示例：
		var content = $('textarea[name=content]').val().trim();
		content = ChangeChar(content);
		或
		ChangeChar(obj.info_title,1)
*/
function ChangeChar(val,stat){
	if(stat){
		if(stat > 1){
			if(/&#[0-9]{2,}/.test(val)){
				var p2 = /([^&#]*)(&#[0-9]{2})([0-9].*)/g;
				var val =  val.replace(p2,"$1$2 $3");
			}
			return val;
		}

		var p2 = /&#60/g;
		val = val.replace(p2,"<");
		var p2 = /&#62/g;
		val = val.replace(p2,">");
		var p2 = /&#39/g;
		val = val.replace(p2,"'");
		var p2 = /&#34/g;
		val = val.replace(p2,'"');
		var p2 = /&#47/g;
		val = val.replace(p2,"\/");
		var p2 = /&#92/g;
		val = val.replace(p2,"\\");
		var p2 = /&#59/g;
		val = val.replace(p2,";");
		var p2 = /&#40/g;
		val = val.replace(p2,"(");
		var p2 = /&#41/g;
		val = val.replace(p2,")");
		//var p2 = /&nbsp/g;
		//val = val.replace(p2," ");
		return val;
	}else{
		var p2 = /</g;
		val = val.replace(p2,"&#60");
		var p2 = />/g;
		val = val.replace(p2,"&#62");
		var p2 = /\'/g;
		val = val.replace(p2,"&#39");
		var p2 = /\"/g;
		val = val.replace(p2,"&#34");
		var p2 = /\//g;
		val = val.replace(p2,"&#47");
		var p2 = /\\/g;
		val = val.replace(p2,"&#92");
		var p2 = /;/g;
		val = val.replace(p2,"&#59");
		var p2 = /\(/g;
		val = val.replace(p2,"&#40");
		var p2 = /\)/g;
		val = val.replace(p2,"&#41");
		//var p2 = / /g;
		//val = val.replace(p2,"&nbsp");
		return val;
	}
}













/*
	###   ajax 异步加载 (JS方式)
	参一：formData(object)  FormData格式数据
	参二：url(string)       请求的地址
	参三：fun(function) 	回调函数
	参四：sync(bool)        是否同步(默认false为异步，true为同步)
	参五：type(bool)		请求方式(默认false为GET,true为POST) 注：GET方式传输数据需要在url中传递，不可使用formData
	示例：
		var formData = new FormData();
		formData.append('file','aaaaa');
		Ajax_FormData(formData,'a.php',function(res){
			alert(res);
			if(/aaa/.test(res)){
				alert(1);
			}else{
				alert(2);
			}
		},true,1);
*/
function Ajax_FormData(formData,url,fun,sync,type){
	if(!sync){
		var sync = true;	//true为异步,false 为同步
	}else{
		var sync = false;
	}
	if(!type){
		var type = 'GET';	//默认为GET方式
	}else{
		var type = 'POST';
	}
	if(window.XMLHttpRequest){
	  var ajax=new XMLHttpRequest();
	}else{
	  var ajax=new ActiveXObject("Microsoft.XMLHTTP");
	}
	ajax.open(type,url,sync);  
	if(!formData){
		ajax.send();
	}else{
		ajax.send(formData);
	}
	if(sync){
		ajax.onreadystatechange=function(){ //监听状态
			if(ajax.readyState==4 && ajax.status == 200){
				fun(ajax.responseText);
			}
		}
	}else{
		fun(ajax.response);
	}
}













/*
	###   ajax 异步加载 (JQUERY方式)
	参一：要传送的数据
	参二：成功回调
	参三：请求的后台地址
	参四：是否异步.当无值时默认为异步，当有值时为同步
	参五：提交方式 默认为post,有值为get
	示例：
		var data = {
					token:t,
					type:type,
					openid:openid
				};

		 Ajax(data,function(res){
		 	alert(res);
		 });
		 或
		 },1);
*/
function Ajax(data,fun,url,async,stat){
	if(!stat){
		stat = 'post';
	}else{
		stat = 'get';
	}
	async = async?false:true;
	if(!url){
		url = after_interface;
	}
	$.ajax({
		url:url,
		type:stat,
		async:async,
		data:data,
		success(rq_res,rq_stat,rq_xhr){
			fun(rq_res,rq_stat,rq_xhr);
		},
		error(){
			fun('false');
		}
	});
}









/*
	### 获取数据 (sess -> cache -> after)
	参一：data  object      后参请求参数 ,注：data.method 是区分请求类型的。默认无值为post,有值为get
	参二：fun   function    回调函数
	参三：after_url  string      后台请求地址
	参四：SessName   string      sess缓存名，必须 local_ 或 sess_ 开头，代表两种缓存方式。空为不设置sess缓存
	参五：cache string      静态缓存地址，以http://开头为跨域缓存地址。空为不设置静态缓存
	参六：cache_expire  int       跨域请求时的最大超时。默认2000 为2秒
	参七：cache_callback    string      跨域回调名,默认空为：Gets
	示例：

		//localStorage.local_a1 = '';
		//sessionStorage.sess_a1 = '';	//黑窑sess缓存，以便从静态或后台获取数据

		var data = {'type':'test'};	//后台请求附带的对象数据

		var after_url = '';
		var after_url = 'interface.php';	//后台请求地址

		var cache = '';			// 不使用静态缓存
		var cache = 'test2.html'; //本地
		var cache = 'http://shop-cache-upyun.bm123.top/test/test22.html'; //跨域

		var cache_expire =1000;	//跨域超时为5秒

		var SessName = 'local_a1';	
		var SessName = ""; 				//不使用sess
		var SessName = 'sess_a1';

		Notice('请稍候...');
		sca(data,function(res){
			C(res);
			Notice();
		},after_url,SessName,cache,cache_expire);
*/
function sca(data,fun,after_url,SessName,cache,cache_expire,cache_callback){
	cache_expire = cache_expire?cache_expire:2000;
	cache_callback = cache_callback?cache_callback:'Gets';
	var res = false;
	if(!after_url && !SessName && !cache){
		fun(res);
		return;
	}
	
	if(SessName){
		if(/^sess_.*$/.test(SessName)){ 	//使用sessionStore
			var s_type = 'sess';
			var s_name = 'sessionStorage.'+SessName;
		}else{								//使用localStore
			var s_type = 'local';
			var s_name = 'localStorage.'+SessName;
		}
		var s_name_save = s_name + '= res2;'
		C(data.type+'_'+s_type);
		if(eval(s_name)){
			res = eval(s_name);
		}
	}

	if(res != false){
		fun(res);
		return;
	}
	if(cache && after_url){
		if(/^http:.*$/.test(cache)){	//跨域请求缓存
			//C(cache_callback);return;
			CorsQuery(cache,cache_callback,function(res2){
				C(data.type+'_cache_cors');
				if(res2 != 'err'){
					res2 = JSON.stringify(res2);
					if(SessName){
						eval(s_name_save);
					}
					fun(res2);
				}else{
					sca2();
				}
			},cache_expire);
		}else{							//本地请求缓存
			Ajax({},function(res2){
				C(data.type+'_cache');
				if(res2 != 'false'){
					if(SessName ){
						eval(s_name_save);
					}
					res = res2;
					fun(res);
				}else{
					sca2();
				}
			},cache,1,1);
		}
	}else if(cache){
		if(/^http:.*$/.test(cache)){	//跨域请求缓存
			CorsQuery(cache,cache_callback,function(res2){
				C(data.type+'_cache_cors');
				if(res2 != 'err'){
					res2 = JSON.stringify(res2);
					if(SessName){
						eval(s_name_save);
					}
				}
				fun(res2);
			},cache_expire);
		}else{							//本地请求缓存
			Ajax({},function(res2){
				C(data.type+'_cache');
				if(res2 != 'false'){
					if(SessName ){
						eval(s_name_save);
					}
					res = res2;
				}
				fun(res);
			},cache,1,1);
		}
	}else if(after_url){
		sca2();
	}
	
	function sca2(){
		var method = data.method?1:0;
		Ajax2(data,function(res2){
			C(data.type+'_after');
			if(SessName){
				eval(s_name_save);
			}
			fun(res2);
		},after_url,1,method);	
	}
}





























/*
    ### 无限分页最新(无总页，效率分页*推荐*)
        参一：当前页
        参二：允许显示最大页码
        参三：成功的回调函数
        参四：>> 后翻的最大页码 (对应后台 $max_page)
        参五：当前页前后各显示的页数
		参六：指定要填充的元素id
        需要一个id为 fpage 的容器元素 如 <div style="text-align:center;margin:20px" id="fpage"> </div>
        示例：
			var max_page = MainGoods_Max?MainGoods_Max:MainGoods_Pnow+1;
			Fpage(MainGoods_Pnow,max_page,function(p){
				MainGoods_Pnow = p;
				MainGoods_GetGoodsList();
			},1,1,'#MainGoods_GoodsFpage');
*/
function Fpage(PageNo,max_page,fun,step,loop,ele) {
	if(!loop){
		loop=2;
	}
	if(!step){
		step=6;
	}
	PageNo = parseInt(PageNo);
    var start = PageNo - loop;
    if (start < 1) {
        start = 1;
    }
    var end = PageNo + loop;
    if(end > max_page){
    	end = max_page;
    }
    var fpage_str = '';
	if(PageNo > (loop+1)){
		fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo='1' >首页</a>";
	}
    var pre = PageNo - step;
    if(pre <= 1){
    	pre = 1
    }
	if(PageNo > 1){
		fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo="+pre+" ><<</a>";
	}
    for (var i = start; i <= end; i++) {

        if (PageNo == i) {
            fpage_str += "<a style='margin:5px;border:1px solid blue;padding:3px 5px;color:#fff;background:blue' PageNo=" + i + ">" + i + "</a>";
        } else {
            fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + i + ">" + i + "</a>";
        }
    }
    var next = PageNo + step;
    if(next >= max_page){
    	next = max_page
    }
    //console.log(max_page);
	if(PageNo < max_page){
		fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo="+next+" >>></a>";
	}
	if(!ele){
		ele = '#fpage';
	}
	$(ele).html(fpage_str);
    $(ele+" a").click(function () {
    	if(PageNo == $(this).attr('PageNo')){
    		return;
    	}
        PageNo = $(this).attr('PageNo');
        fun(PageNo);
    });
}











function C(res){
	console.log(res);
}

function A(res){
	alert(res);
}


/*
	### 将时间戳转换成 年月日格式的字串 
	### 参一：stamp js时间戳 
		参二：stat无值反回年月日，有值返回年月日时分秒
	### return : 返回年月日格式的字串
	### 示例：
		var t2 = StampToYmd(server_time);	//2018-5-15
*/
function StampToYmd(stamp,stat){
	var t = new Date(stamp);
	var t2 = t.getFullYear()+"-"+(t.getMonth()>=9?t.getMonth()+1:'0'+(t.getMonth()+1))+"-"+(t.getDate()>=10?t.getDate():'0'+t.getDate());
	if(stat){
		var t3 = t2+' '+(t.getHours()>=10?t.getHours():'0'+t.getHours())+':'+(t.getMinutes()>=10?t.getMinutes():'0'+t.getMinutes())+':'+(t.getMinutes()>=10?t.getMinutes():'0'+t.getMinutes());
		return t3;
	}else{
		return t2;
	}
}


